package com.example.cloudcommon.util;

import com.google.gson.Gson;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import java.io.*;

public class SvgToJpgWithScaling {
    public static void main(String[] args) throws IOException {
        String svgFilePath = "input.svg";  // 输入SVG文件路径
        String jpgFilePath = "output.jpg"; // 输出JPG文件路径
        float scaleFactor = 1f;          // 缩放比例（0.5 = 缩小50%）

       File[] files = new File("C:/Users/tiany/Desktop/导入数据/北京丰台火车站/Client/svn/old").listFiles();
       String out = files[0].getParentFile().getParent() + "\\new\\";
       for (File file : files) {
           svgFilePath = file.getAbsolutePath();
           jpgFilePath = out + file.getName().split("\\.svg")[0] + ".jpg";
           System.out.println(file);
           System.out.println(svgFilePath);

           extracted(svgFilePath, jpgFilePath, scaleFactor);
       }
    }

    private static void extracted(String svgFilePath, String jpgFilePath, float scaleFactor) {
        try {
            // 1. 创建Transcoder（JPEG格式）
            JPEGTranscoder transcoder = new JPEGTranscoder();
            Float[] wh = getSvgWidth(svgFilePath);
            System.out.println(new Gson().toJson(wh));
            // 2. 设置JPG输出参数（质量、缩放）
            transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, 1f); // 质量（0-1）
            transcoder.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, (scaleFactor * wh[0]) ); // 等比缩放宽度
            // 或者直接指定目标宽度（自动计算高度）：
            transcoder.addTranscodingHint(JPEGTranscoder.KEY_HEIGHT, (scaleFactor * wh[1]) ); // 目标宽度800px

            // 3. 输入SVG文件
            TranscoderInput input = new TranscoderInput(new FileInputStream(svgFilePath));

            // 4. 输出JPG文件
            OutputStream outputStream = new FileOutputStream(new File(jpgFilePath));
            TranscoderOutput output = new TranscoderOutput(outputStream);

            // 5. 执行转换
            transcoder.transcode(input, output);
            outputStream.close();

            System.out.println("SVG 转换为 JPG 成功！缩放比例: " + scaleFactor);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取SVG的原始宽度（用于计算缩放比例）
     */
    private static Float[] getSvgWidth(String svgFilePath) throws IOException {
        // 简单解析SVG文件获取宽度（示例，实际可能需要更复杂的解析）
        try (BufferedReader reader = new BufferedReader(new FileReader(svgFilePath))) {
            String line;
            Float[] ret = new Float[2];
            while ((line = reader.readLine()) != null) {
                if (line.contains("viewBox=")) {
                    String[] wh = line.split("viewBox=\"")[1].split("\"")[0].split(" ");
                    String widthStr = wh[2];
                    String heighStr = wh[3];
                    ret[0] = Float.parseFloat(widthStr);
                    ret[1] = Float.parseFloat(heighStr);
                    return ret;
                }
            }
        }
        return null; // 默认宽度（如果无法解析）
    }
}